#include <iostream>
#include <string>
#include <unistd.h>
#include <cstdio>
#include <pthread.h>
#include <thread>

void showtid(pthread_t &tid)
{
    printf("tid:0x&lx\n",tid);
}


void *routine(void* args)
{
    std::string name = static_cast<const char*>(args);
    int cnt = 5;
    while(cnt)
    {
        std::cout << "我是一个线程，我的名字是："<<name<<std::endl;
        sleep(1);
        cnt--;
    }
    return nullptr;
}

int main()
{
    pthread_t tid;
    int n = pthread_create(&tid, nullptr, routine, (void *) "thread-1");
    (void)n;

    showtid(tid);

    //必须等待子线程，否则会有类似僵尸线程的东西
    pthread_join(tid, nullptr);
    return 0;
}

// void hello()
// {
//     while (true)
//     {
//         std::cout << "新线程: hello world" << ",pid: " << getpid()<< std::endl;
//         sleep(1);
//     }
// }

// int main()
// {
//     std::thread t(hello);
//     while (true)
//     {
//         std::cout << "我是主线程.." << ",pid: " << getpid() << std::endl;
//         sleep(1);
//     }

//     t.join();
//     return 0;
// }

// void* threadrun(void *args)
// {
//     std::string name = (const char*) args;
//     while(true)
//     {
//         std::cout <<"我是新线程, name : " <<name<<",pid: "<<getpid() << std::endl;
//         sleep(1);
//     }
//     return nullptr;
// }

// int main()
// {
//     pthread_t tid;
//     pthread_create(&tid, nullptr, threadrun, (void*)"thread-1");
//     while(true)
//     {
//         std::cout << "我是主线程.." <<",pid: "<<getpid() <<std::endl;
//         sleep(1);
//     }

//     return 0;
// }